I think the only problem I have is to use two state machines.
"have to" is a bit strong :)
There is a computation known as "synchronous product of automata" that can merge several synchronous automata into one. The caveat is that the resulting automaton is hard to understand, not easily human-editable anymore, and may contain lots of states (if you merge a automaton with N states with one with M states, the product may contain up to N*M states, ie you may get a state explosion). You want tool-support to generate such a product. All this makes the product less useful for an article, which is why I didn't mention it.
For the example, where the Idle/Walk automaton has just 2 states, and the synchronizing events cause state changes in only one automaton, it's quite doable by hand, as shown below:
[attachment=34368:walk_product.png]
You make a copy of the entire animation state machine for each state in the idle/walk state machine. In the picture, the upper dotted box represents the combination "WantIdle&<animation-state>", the lower dotted box represents the combination "WantWalk&<animation-state>".
Next you copy the edges from the Idle/Walk state machine to every corresponding pairs of states between the round boxes, the thick cyan and magenta arrows are the "desired_speed == 0" and the "desired_speed > 0" edges.
Finally, the "WantIdle" state forbids the WantWalk edges, so remove them from the upper box. Similarly, remove the WantIdle edges from the lower box. I also removed the Init edge from the bottom box, assuming you want to start in idle state.
All the 8 states are reachable, so you can't remove any of them. In this way you can have a single state machine with combined behavior, if you don't mind having many states.
I now describe the entire animation in a blend tree.
I didn't know these, so I had a quick look. After reading the general description, it looks to me more like a way to re-use parts of an animation, but I may be under-estimating its power.
It is probably a matter of choice and both work fine.
I think so too. How you represent state in run-time is not very relevant, a variable with a value is as much state as a pointer to a "current state" object.