This is an interesting thread. I just wanted to add a couple of notes.
First, you should check out the products available from X-rite for spectral measurement:
I have used their spectrophotometers in the past, to good effect. I think they're prices are competitive, but not what I'd call "cheap."
Second, a quick explanation of what macbethcal does. Macbethcal takes a captured image (scanned, photographed, etc.) of a Macbeth ColorChecker chart and attempts to derive a transformation that takes this capture to the correct values known for the Macbeth chart. It first computes an overall response function for each channel using the 6 gray patches at the bottom of the chart. Then, it computes a 3x3 color matrix based on a least squares minimization of error on the unsaturated colors. Saturated colors are allowed to go "out of gamut" as needed to find a reasonable solution.
In my experience, this process works well for flatbed scanners and some capture methods, but sometimes does poorly with certain digital cameras. I do not know why. As Alexa and Jack pointed out, macbethcal does not account for changes in the illumination source -- this is assumed to be part of the capture process (i.e., a scanner with a builtin source), and since the purpose is to derive a transform that recovers colors under this souce, this is appropriate.
If you wish to simulate general reflectance spectra under different illuminants, I suggest you go with a full spectral measurement and follow the procedure outlined in the following paper:
Third, I wanted to point Alexa and other interested readers to the following reference, which explains the parts of human vision pcond attempts to simulate and the algorithms behind it:
I'll be the first to admit that it is not a perfect simulation of human vision, and this is an ongoing area of research. (Try a websearch on "color appearance models" to get an idea.) However, I think others will agree that pcond can be useful, and is an improvement over the standard "linear with clamping" method for image display.