I also had the same question and figured out that I needed two different and separate finite state machines (FSM): one for the animations and the other one for the game logic. At least this was my conclusion.
In my game, I have a FSM to handle all the game logic and check if the character is allowed to perform certain actions, according to his sate: grounded, on air, hanged, climbing, on a ledge, etc. And the Animation state machine for triggering the correct animations.
I decided to work with two FSMs because they have specific purposes. For instance, the FSM that handles your game logic can check if the player is allowed or not jump. On the other hand, the animation state machine will play the correct jump animation, according to the character’s foot that was currently on the ground (e.g.: “jumpStartLeftFoot” or “jumpSartRightFoot” animations).
For the game logic, the current animation playing its completely irrelevant. It just needs to know that the character jumped and not that it is on “mid air” state.