I've seen lots of suggestions for teaching, but I had an idea for a mechanism to implement it that I think might work well. Most of the other suggestions I've seen have simply had a "teaching" skill, or used a guild or other kind of school. (I know there's a dev item on the subject, but I can't find it)
My idea is to designate a dwarf as a "teacher", and will teach any subject in their labor list, but will no longer do those jobs. So, let's say you have a dwarf designated as a teacher, with the Brewer labor active. If a dwarf of lesser skill takes a "brew drink" or "extract plant essence" job, then (if the teacher is free) they'll wait at the still for the teacher to arrive and do the job together. (Basically, any time a job is assigned to a non-legendary dwarf, it would produce a "teach" job that would disappear if there is not a teacher of that skill available) The resulting item would be of a quality consistent with the average skill of the student and teacher, and the student would gain skill according to the difference in skill (so, a dabbling dwarf with a legendary teacher would learn very fast, but would barely learn faster with a novice teacher). A teaching skill could be added to improve the rate at which the student learns. (of course, then you could have the situation where you have a legendary instructor who goes around teaching teaching, so your novice brewer waits for the brewing instructor, who then waits for the teaching instructor...)
This would be a good way to make use of high-skill dwarves to train up lower-skill dwarves. The tradeoff is that you lose the use of those high-skill dwarves the entire time they're teachers, and it'll take much longer to produce items if you have to wait not only for the dwarf doing the job, but also for the teacher.
For military dwarves, this could be a great way to use the champions (who would, I suppose, teach sparring) while at the same time preventing those champions from injuring other dwarves while sparring. (I have a number of champion wrestlers in the Fortress Guard who are otherwise entirely useless to me...)
An alternate way to do it is to designate dwarves as "students", and spend their time learning the skills in their labor list. Any time a dwarf of higher skill is assigned a job for which there is an available student, then the dwarf will wait at the work site until the student arrives, and the student will watch his temporary teacher perform the job.
This method would probably tend to speed up the rate at which a student learns, as the ratio of students to potential teachers would be higher. However, it could slow down production tremendously -- particularly if you designate a miner as a student, and you have a number of shafts distributed around your fortress.