Actually I agree with the crafting trainer part but for the others it should just be for when you level up.
Of course some crafting recipes would still be unlocked at certain levels but others you'd have to see a trainer for or find a schematic or get OTHER skills to certain levels to stop Trigun people from just buy-selling their crafting up.
Of course I'd also want to implement something like recipes not giving exp once you're 10-15 levels above their level.
As for how the trainer would be implemented, it'd be Client->openTrainer(category, level) - so openTrainer(Smelting, 25) or openTrainer(Fletching,100). They'd teach any recipe from that category that is at or below the given level and that you haven't unlocked already, so long as that recipe has a Learn unlock condition set.
Unlock conditions would be a tabbed list of the skills needed and what levels they're needed, and if you add "learn" anywhere in that list it'd show up in the trainer once you meet all those requirements (for example, "crafting 50\tmining 40\tlearn")