Should I add methods to my classes that inherit db.Model, or should I inherit those classes into a new class?
Adding methods to db.Model subclasses is perfectly fine practice. There's only any point in having your actual model subclass something that is itself a db.Model subclass if you have common functionality you want shared by several model classes - just like in standard inheritance.
I'm not sure how your proposed approach would help with "not saving to the datastore without required attributes", unless you're planning on creating your own data models that you translate to and from datastore models - which is just going to be a huge waste of time (both yours and the processor's). The way the datastore library works, it's not possible to create a model with values that don't validate, and I'm not sure why you'd want to.
When working with classes that inherit db.Model, is it better practice to add methods, or should I instead create a separate class?
E.g., if I want to store information on posts, should I have Post extend db.Model, or should I have PostData extend db.Model and Post extend (or even reference?) PostData?
The difference, I think, is that classes that inherit db.Model won't create instances without all the required attributes. The behaviour I'd like to see is not saving to the datastore without required attributes. Which is cleaner? Which is preferred?