Looks good. Some comments:
- Do you need to duplicate Version in all blocks? I would rather add some code to propagate the Version from the parent and avoid the duplication.
- Maybe choose a different name for Assembly to avoid confusion with vtkDataAssembly? Hierarchy maybe?
- Are you going to have a different type for Multiblock and PartitionedDataSetCollection? Probably yes because the indexing scheme is different.