Wow, 10 references within the first 3 lines. That is some serious stuff.

It is definitely some serious stuff. I had 26 semester units of math in college (and got an AA in Mathematics on my way to a BS in Computer Science), but there's still a whole lot that goes over my head because it's been too long. The most beneficial part for me is at the end, where there are working sample implementations of both the 6DOF IMU filter and the 9DOF MARG filter. Excellent code, that.

On a different note, I think I finally solved the problem here, thanks to a lot of experimenting, searching, and direct help from others. It's too complicated to explain in detail here, so I'll summarize the steps necessary to pull it off:

1. Obtain orientation of device and store in quaternion (accomplished by the IMU filter).

2. Calculate estimated gravity vector from quaternion.

3. Remove acceleration due to gravity from raw accelerometer x/y/z measurements.

4. Store gravity-free acceleration as a quaternion where w (vector rotation) is zero.

5. Multiply orientation quaternion [w, x, y, z] by gravity-free acceleration quaternion [0, accX, accY, accZ].

6. Multiply previous result quaternion by the conjugate of the acceleration quaternion [w, -x, -y, -z].

7. Final result quaternion now contains [0, realX, realY, realZ] acceleration in the starting (non-rotated) frame of reference.

It appears to be working correctly. A bit more visualization testing and I'll know for sure, but the math matches what I've read and been told, and the raw numbers appear to be at least close to what they should be, which is always a good sign.

Final IMU example SparkFun 6DOF-friendly Arduino sketch to come.

And yeah, InMojo has been great lately, except they do seem a bit quiet on the PR front. I don't pay too much attention to that though, honestly--not out of apathy, but out of busy-ness. :-)