I tend to follow a tactic similar to Peter's. I just use text files, and put them under version control. This allows me easy access and easy diffs. Not pretty though. I tend to use Word (or OpenOffice) if I need to communicate with the customer/business people.
I also like to keep all my SQL scripts under source control, though I don't put them within the solution. As mentioned by Trent in another post, if using the DDT, integrating the creation of a package during the build process, that then gets put under source control is seems like an excellent way to manage this also.
I also tend to just document much of this sort of thing directly in code, using XML comments (/// or '''). This makes the logic available within the object browser and you can use Sandcastle (which I haven't yet) to make msdn help files of your objects. By putting it directly within the code, it is easier to keep track of it, it tends to be were I need it, when I need it.
My system isn't perfect, so I'll be interested in any other ideas of how to manage this sort of documentation myself.