defined validation

Okay, tear it apart :)
* Always use the `=>` notation for hashes, because the `:` notation works only with symbols, but not with variables,  and I don't want to mix two different styles
* Always use parentheses when you have a function call with at least one argument. Don't use parentheses for anything that looks like a keyword in DSLs (e.g. `field :name`).