For multiple dispatch, maybe you could find examples of where people working in C++, Java, etc. have had to implement the Visitor pattern. I've done it a couple of times myself, in compilers: it's common to implement an analysis or optimization pass as a tree walk over the AST, dispatching off both the type of analysis and the type of the current AST node. Not sure that's going to be the most accessible example, though.
I have used multiple dispatch in FSet. One of the nicest things about having MD available is that you don't have to think about it; if you need it, you just use it. So until this moment, I hadn't really stopped to reflect on what I use it for. For one thing, FSet has a generic function convert that has over 200 methods; it takes a symbol, which specifies a target type, and a collection to convert, dispatching on the symbol (using an eql specializer) and the type of collection. But there are various other uses too; for instance, there's a bag-sum operation which also accepts a set as either argument; this is handled in the obvious way, by dispatching on both arguments. But I don't know that either of these examples is compelling enough to use in a book. You're welcome to cite FSet, though, if you like.
The only thing I've done with the MOP recently has been to write a quick-and-dirty
compatibility layer, allowing some old Flavors-based code to be run in Common Lisp. You're welcome to cite this as well.
-- Scott