Well there are a million ways to do it. It seems the highly restrictive class methods are harder to balance the game, but then you can just tell people that, for example, playing the Rogue is hard mode and the Wizard is easy, etc...
I've always been interested in a system where the character classes have no special skills, but are differentiated entirely by what items they can use. All can drink potions but only the fighter can use heavy weapons and armor, only the wizard can read scrolls, only the cleric can use holy relics, the Rogue can use the lock picks, cloaks and daggers, etc...
But then you run into the issue of junk items. If you are building a game where grinding gear is part of it then use restricted classes end up with lots of junk gear. In Diablo you can sell the gear. So that's one solution to that issue.
If you end up using classes that give only small bonuses for certain things then you risk ending up with 'samey' type classes. Having classes is supposed to increase variety and replay value. To combat this you'd have to make the bonuses pretty hefty. For example every class can use daggers, but the Thief does double damage. The wizard reads scrolls at 2x proficiency, the fighter adds 2x his strength to his armor class when using a shield, etc...