Re the "validate and such" part of the query: The alter-meta! way works (and is more a base case than an exceptional case) because in Clojure you are at liberty to establish vars in any way that suits you. Indeed Clojure provides multiple ways as examples, including defn, defrecord, defmulti, etc., and by no means is it a closed set. Consequently, the only way, strictly, to find and check docstrings is to eval the forms and then query the Clojure environment for vars' metadata.