I found XSD to be very difficult to use as a model for code generation. It is too flexible and complex to be practical for my needs. The strongly-typed DataSet designer/generator is a great example of an attempt to use XSD as the code generation model. It works OK most of the time, but does not support all possible schemas you could throw at it. On the other hand, XSD cannot represent information required to generate table adapters directly, so DataSet-specific extensions had to be created.
If you decide to go ahead and use XSD as the model, you will probably want to pick a simple subset, sufficient for what you need to generate. One approach could be to load XSD schema into a DataSet object and use this DataSet object as the model. DataSet metadata is a lot simpler to access than general-purpose XSD. This would also allow you to use the existing DataSet designer in Visual Studio to edit your models.