I did some more digging, and I need to correct my previous post. The GP-Wiz40 is properly recognized by the Linux system, and is mounted using the joydev module. However, the reported joystick values are 0, 127, and 255 (the previous -127 to 127 is just plain wrong. Sorry about that.) So in addition to being small compared to the Logitech gamepad values, there's a fixed offset. I also built a better test fixture, and confirmed that Button1 and Button2 for Player 1 respond properly. So at least part of the GP-Wiz40 is being handled properly.
I was hoping I could manually edit the code in the GP-Wiz40, but the Cypress CY7C63513 low-speed USB microcontroller doesn't appear to be in-circuit programmable. I could have handled a Microchip or Atmel device. Dang.
So I've been bashing away at the MAME and SDL sources. I've been able to build both from source (which ain't an easy task.) I've added diagnostic print messages to try to figure out where the MAME code decides what kind of joystick is present, how it scales and limits the input values, and then hands that data off to the emulator core. Honestly, I'm an embedded guy, and the C++++ infinite-layers-of-abstraction are making my head asplode.
From the Linux command line, I can run jscal and properly calibrate the joystick. Once calibrated, jstest reports values of -32767, 0, and 32767. That's encouraging, but MAME doesn't seem to be using the calibrated joystick values. I've read about SDL ignoring the /dev/input/js0 device in favor of the event interface (which can't be calibrated.) I poked at the libSDL package and re-built it from source, commenting out the event driver path. Didn't make a difference, though at this point I'm not convinced that what I changed was comprehensive enough to do what I want.
SDL calibration issues are referenced here:
http://superuser.com/questions/17959/linux-joystick-seems-mis-calibrated-in-an-sdl-game-freespace-2-open