I tried the webstart demo just now and it looks like there is still a bug at this point. I get the following results from the test for the gamepad:
"Button 0" through "Button 8" still have an "Unknown" identifier.
Then, "Button 9" through "Button 11" do have an id which is better than before, but it might not be correct:
The joystick shows "Unknown" for "Button 0" through "Button 7", which is all the buttons it has.
I agree, the design you describe is a good way to handle input mapping. I didn't add user customization, but I did implement the virtual keys part already in case I wanted to later. My project isn't very far along though, so for now I just wanted to provide a default mapping for the virtual keys, which is why I got into the identifier issue in the first place