Data binding solves this generically. It allows you to build state machine trivially Stuff like angular and ember do this amazingly well though it would be nice to have a nice standalone library. (no idea if one exists)
Using a declarative DSL designed for validation rules should make it much simpler, it would minimize the amount of writing the boilerplate stuff that comes with a general purpose language and would focus solely on the actual validation rules.
It could be used in the same way as templating for javascript is used, a script element with a custom type or validation-src attribute in the form or something.
Though I'm not sure how much this could be generalised since complex validation rules are effectively computer programs in themselves.
Not sure what your approach to this problem is, but perhaps one way to do it would be a validation engine that is inherently functional by design.
Of course, ideally it should be something that can plug in to popular web frameworks easily.