I'm using AppEngine NDB properties and I wonder what would be the best approach to:
Would it be best to use the validator argument or to subclass base ndb properties?
It depends. Are the restrictions one-off or is any particular restriction going to be reused in many different fields/models?
For one-off restrictions, the validator argument is simpler and involves less boilerplate.
For reuse, subclassing lets you avoid having to repeatedly specify the validator argument.