validatorに関しては、インスタンスはinstance属性に何を指定しても、 validate()が呼ばれる毎には別になってしまっています。 setterは属性がsingleton以外では、どれも同じ動作をするようですが、 singletonと定義したときのみ、setterが呼ばれるのが起動時に1回のみとなります。 (5)のパターンを考えると、singletonで定義し、 setterでstaticな変数に値をコピーしておくしかなさそうです。