Fair enough. It's entirely unlike constraining in statically-typed languages, but in practice it can still work as constraints if you verify the specs as pre/post conditions of your functions (for which Clojure has some nice syntactic goodies available by default).
The way we've used it, it worked almost as if the maps were statically-typed, and it saved my bacon quite a few times.