yeah, i know this is an almost-dead thread, but i thought id put in my two cents.
what i do in my campign is simple. Races have some obvious affinities with classes, so each and every specific sub race gets a list of Class Choices. Other than these, other classes are disallowed. Any level taken in any of the list of Class Choices doesnt implement an xp penalty. Now, to balance that, charater may have levels in only 3 base classes of their choices, and two prestigue classes. simply put, not every dwarven adventurer is a fighter, their society couldnt sustain itself like that. Thats why every sub-race has a specific set of classes (and prestigue classes) they can choose from. it keeps the game focused, and playable. simply put, each race has a group of (essentually) favoured classes, adn there isnt an exp penalty (the penalty being that they cant take levels in other classe/prestigue classes that might otherwise be applicable)
for example, in my world, i have 3 sub races of dwarves. There are mountain, hill and deep dwarves, but for this, Ill just use Mountan and Hill Dwarves.
Mountain Dwarf Class Choices: Crusader, Fighter, Noble, Priest, Hunter and Rogue
Hill Dwarf Class Choices: Beserker, Crusader, Fighter, Priest, Hunter and Rogue
in my campaign, mountain dwarves are the original race, who live in their mountain strongholds deep underground, and hill dwarves are those who have created communities outside of their mountain homes. So, a hill dwarf could multiclass between the fighter, berserker and crusader at no penalty, but he could never gain levels in noble (thats only for mountain dwarves) or druids, etc (those classes that are for other races); and his mountain dwarf companion could never gain levels in berserker.
feedback welcome.