Yes, it makes sense to put the "kick" method on the critter. Especially if you're going to check for prerequisites like if the critter has legs. One way to do it is to add a kick(critter, direction) method to the map and kick(enemy) on the critter.
Map.kick(critter, direction) {
enemy = [get the critter in the given direction]
if (enemy == null) // no enemy
return;
critter.kick(enemy);
}
Critter.kick(enemy) {
if (!hasLegs)
return;
damage = [calculate damage based on strength, bonus from metal boots, etc]
enemy.inflictDamage(damage);
}
This way you are also free to override the Critter.kick method if you add a special kick attack or something.
Ps. personally I don't go for this kind of ultra-clean design, as it takes more typing, add complexity to the code, and there's a high chance you'll need to break it because of some corner case later (especially in roguelikes). So I just keep a backreference from critter to map, there are many dirtier places in my code anyway.