Thanks for the suggestion. There are a few conflicting factors at play here. One is code bloat/cleanliness as you mention. The other is clarity of error messages (and performance) which we have treated as more important.
In particular, when validation on a function fails, we want the top of the stack trace to be the function in question and not a helper method deep inside schema. And, from a performance point of view, want to avoid any var derefs in the common case that validation is turned off. For both of those properties to hold, at least those two bits have to be inlined.
Thoughts? We're open to contributions of cleanups but also probably wouldn't want to sacrifice clarity of error messages or performance without a really good reason.
-Jason