Call validate with $as.
Refactor hydrate and supporting functions.
Refactor isValid, update docs.
Update docs.
Add the option to override default controller name.