The Axis Event Extended action with the Discrete Event option enabled was exactly what I needed to handle gamepad input for my latest puzzle game. The only problem I had was that if I pressed in one direction multiple times, then the event would only fire once.
I looked at the source code for the action, and I noticed that the currentDirection value is only set when OnEnter is called. Since the state only changed in my FSM when the joystick axis was moved in a direction, the OnEnter method was not getting called again when the same direction was pressed multiple times in the same direction. This is because the currentDirection variable in the action did not change after the joystick moved back to the neutral position. With Discrete Events enabled, the direction event only gets fired if the currentDirection variable is different from the direction being pressed.
To fix this, I created an event (I called it doNoDirection) which I set to the No Direction dropdown for the action, and I made a transition that loops back to its own state.
Now, for instance, if I press right twice on the game pad, the right event fires, then the no direction event fires (looping back to the state which invokes OnEnter, resetting the currentDirection variable), then the right direction fires again (since the current direction is set to no direction, which is different from right).
I hope that makes sense, and I just wanted to share in case anyone else was having the same problem.