I can think of very few situations where I would want Version to be a dense dimension. If you think about it, users typically retrieve and calculate data for one version at a time. By making Version dense, you're saying to the user, "I know you only want data for one version, but I'm going to make you pull a block into memory that contains ALL versions". Here's an analogy . . . it's like you're commuting to work in an 18 wheeler, when you really just need a Smart Car.
This would of course be false if you had some business requirement that users typically retrieve data for (and calculate) data for all of their versions at the same time. I've never seen anything like that, but I suppose it could happen.
So the bottom line is this . . . I don't think a few top-level members are your problem. I think your overall design might be questionnable. (Unless of course you have the odd business requirement that I described above.)
So tell us . . . how are you using Versions?
BTW - I typically set Currency to be sparse as well. Like Versions, my users are typically looking at one currency at a time. No need to burden the block with data they don't care about. It's just extra I/O that I'd rather avoid.