1) It is placed in the init() method because you are basically registering a validator for an attribute name. Init itself will only be called once when instantiating the Observe using the new operator.
2) I'm pretty sure it doesn't validate nested properties, you will have to do it yourself.
3) What else are you looking for?
I don't think the method signature you are mentioning exists.