How should I detect a mob that no longer has a passenger?

Solution 1:

Sadly you can't just test for an empty list of passengers, because the game removes the Passengers tag when the zombie is killed instead of just emptying it.
But you can detect all chickens and you can detect all chickens with passengers, so you can do something like this:

/scoreboard players tag @e[type=chicken] add noPassenger
/scoreboard players tag @e[type=chicken] remove noPassenger {Passengers:[{id:"minecraft:zombie"}]}

This first adds the tag noPassenger to all chickens and then removes it from every chicken that is ridden by a zombie. You can later select all tagged chickens with @e[tag=noPassenger].