I'm not totally sure I like this property being part of all Spaces. Maybe someone else like @lamblin should weigh in.

Some things that make me uncomfortable are that for CompositeSpace we now need to maintain two parallel data structures (the nested structure of Spaces and the nested structure of dtypes). Having to maintain both structures means we need to write code to modify both in all cases, and introduces the possibility of having bugs where the two trees get out of sync. It seems more elegant to me to have one tree of Spaces where only the leaves have dtypes.

More philosophically, we might one day want to have Theano Variables / Pylearn2 spaces that represent non-numeric entities, such as strings. I guess their dtype could be 'char'.