LOOOONG post ahead
This is a guide of enemy behaviours in beat 'em ups, similar to my SHMUP WORKSHOP videos, or my Bullet Hell 101 doc. The goal is to identify & codify a bunch of concepts that will help you not only design enemy AI for your own games but also help you quickly analyse them in other beat 'em ups you play.
There are 2 ways to improve enemy designs - making their neutral movement more interesting, or making their states more interesting. I'll focus on the neutral movement side of it for now, because that side is under-explored & somewhat unique to the genre.
[WARNING!!!] Most of this info is the result of trial & error style testing with no access to the code of the actual games, so there might be things I've hallucinated after seeing patterns where there are none, and the implementation might be completely off. [WARNING !!!]
[ENEMY STATES]
A quick rundown of states just in case. Basically just state machines.
[Neutral state] - The enemy's not doing any action, usually they continuously move around in this state, moving towards their selected position slot. Or they switch movement modes randomly. Sometimes they stand around doing nothing, even.
[Attack state] - Enemy commits to an attack and will perform it unless the player forces them out of it in some way.
[Walk/Run/Dodge/Jump state] - Enemy commits to some kind of mobility-related move. Usually can't cancel it unless they reach their target, finish their state or get forced out of the state by the player.
[Hitstun, Knockdown, Launched, Blockstun] - Same as fighting games. They're relevant because this often resets the enemy's decision or otherwise affects their AI.
[NEUTRAL MOVEMENT]
A general concept that won't match your in-game states 1:1, it's a little bit like the neutral + footsies phases in a fighting game. Usually it's what enemies do in their neutral state (but not always, it can happen in other states), trying to get to a position, reacting to the player's movement, and playing around with the player in various ways.
[AI MODES]
Also called moods or something like that. It's what the AI decides it feels like doing during neutral movement. Will probably be just states like any others in your code, but it's worth calling them "modes" for the sake of clarity.
[DECISION]
*Enemies "decide" which action to take, continuing or switching their modes/states based on a RNG or specific conditions. Usually runs off a timer which can be either fairly predictable (about 4-5 seconds in Streets of Rage 1) or completely random (I dunno wtf is going on in Final Fight).
Sometimes whatever it is they're targeting gets decided at this point, and even if the player moves away they will move towards/attack that point (Double Dragon enemy circling behavior, El Gado knife jump, SOR4's enemy behavior in general). Often can be seen as either short or long pauses in the enemy's movement. Sometimes this state may be given unique "looking around" or idle sprites.*

^ Position Slots. Can be close for when the enemies are aggressive, or far away when they’re being passive.
[POSITION SLOT]
Two spaces next to the player that serve as the targets that enemies move towards. Distance can vary based on enemy type (their range) or the attacks the enemies want to do. Also sometimes called a [Kung Fu Circle] in 3D games.
[Target Slot] - Which slot the enemy's targeting (could be slightly offset/randomized)

^ Left slot being targeted by the enemy.

^ Enemy resetting its targeting after a certain amount of time has passed.
[Target Slot Reset] - When an enemy changes which one of the 2 slots they will target. Can happen randomly based on a timer, or during a decision, or when they get knocked down, or after a jump. Sometimes it doesn't happen at all, and even if an enemy jumps behind you they will walk back to their original position slot right after recovering.
[Target Position] - Similar to the slots but more general. This is any kind of target the enemies select - a random X/Y/Z position on the screen, the player's location, or anything else.

^ Target Orbit example
[Target Orbit] - A point that orbits a specific X/Y/Z location (a position slot, the player's location, or a random location on the screen). Enemies will move towards those orbiting points. A large orbit radius around the player helps enemies walk circles around them. When enemies do seemingly random circle movements outside your range, you know you're dealing with target orbits.

^ Slot Capacity. Two aggressive enemies are occupying each slot, so the other 2 enemies are forced into passive/mobility mode.
[Slot Capacity] - In some games, enemies get "assigned" a slot, and the slots have a maximum enemy capacity. Other enemies know which slots are occupied and avoid choosing them. This isn't as common as you think, but Golden Axe is a good example - only 2 enemies can go for your position slot at any given time, the other enemies stay passive.
[CAMERA STUFF]
Position Slots present a problem - how does the game handle the fact that sometimes enemies will want to target a position that's outside of the camera?
[Screen Center Check] - Sometimes enemies will decide which side to target based on where they are relative to the center of the screen, such as Knights of the Round. If the player's on the left side they will target the right slot, if the player's on the right, they will target their left slot. This is prevents them from hanging out off-screen.
[Target Position Override] - Prevent enemies from targeting the Position Slot that's offscreen entirely so enemies will always approach from the front.

^ Padding. The red line shows the border
[Padding] - An invisible wall on the sides of the screen that blocks the player character, but not the enemies. Vendetta & Double Dragon do this.
[Invisible Walls] - Just block the enemies when they try to move out of the screen with an invisible wall, and clamp the Position Slot's X/Y/Z location to the screen.
[NEUTRAL MOVEMENT MODES]

^ Aggression mode
[Aggression Mode] - Enemies aggressively move in to occupy a Position Slot and attack when in range. Then they can stay there and keep attacking, do a combo and leave, leave after the first hit, or anything else.

^ Mobility mode.
[Mobility Mode] - Enemies purposefully move while outside of the player's range, can be a variety of movement. From circling the player, to just moving slightly outside of range (usually adjusting the distance of the Position Slots), to picking out random points to move to, to staying away from the player's Z plane, to going where the player isn't looking, etc. This is where the enemies show their personality.
[Passive Mode] - Enemies hang back further away from the player without too much of a purpose, sometimes moving around completely randomly, sometimes orbiting a larger circle around the player.
[Line of Sight Reactions] - Sometimes enemy behaviours depend on whether or not the player is looking at them. This varies immensely, but usually they will enter a more mobile, defensive mode when you’re looking at them. Streets of Rage 4’s Dylan enemy is the most obvious example, but this behaviour exists in a lot of games, including Streets of Rage 1 and Double Dragon.

^ Caution Mode/Hitbox Dodge
[Caution Mode/Hitbox Dodge] - Enemies move back or stop their forward movement when detecting a player's attack hitbox, or perhaps input/state reading. Usually a part of other modes. In Double Dragon, they check if the player’s looking at them and in any kind of active state (including jumps), if so this overrides their movement.
[Aggression Capacity/Token System] - How many enemies can actively target the player for an attack at any given time. Usually some kind of global array, timer, or other kind of check. Sometimes called a token or ticket system - a certain amount of aggression tokens are available at any given time and enemies line up to grab em. This can be a literal que, or rng-based.

[State Timeline] - A way to visualise how different states overlap & cancel each other out. Think of it as a timeline of passive/aggressive states with decision points in between. If, during the decision to go aggressive, an enemy detects that enough other enemies are attacking/targeting the player, it will skip its aggressive state and go to its passive state. This system tends to be nicely chaotic, enemies will often alternate between being aggressive & passive in unpredictable ways because of how the states overlap.
[MOVEMENT TYPES]

[Responsive/Unresponsive] - Whether or not the enemy movement responds to your state or inputs. Sometimes enemies get their destination at the start of their movement and stick to it, sometimes they update it in real time. Same with distance, sometimes enemies will move away if you come close, sometimes it doesn't matter. This doesn't just vary game to game, enemy to enemy but even for a single enemy there's usually a set of responsive vs unresponsive states.

^ Continuous movement
[Continuous] - Enemies don't have any breaks in their movement, they always move and only stop when reaching their Position Slot/target location or getting interrupted by the player.

^ Semi continuous mess
[Semi-Continuous] - Enemies mostly move continuously but will pause or move back/to the side a little bit. Can be RNG or conditional based on the player's behavior.

^ Orbit. Enemy moving towards a point orbiting their goal
[Orbit] - You might see enemies do little circle-like movements around a point, this is because they're targeting an orbit around said point instead of the point itself.

^ Stutter movement
[Stutter movement] - Enemies will move in short quick bursts, usually being unable to change their direction. Burst movement speed is sometimes randomized. The periods during which they're still are usually Decision points, but not always.
[State-based] - Enemies will move by committing to a special, unreactive state like running or sliding. It doesn't have to be 100% unreactive, but it has to be limited.
[Inertia] - Sometimes movement has some inertia to it so enemies can't change directions instantly.

^ Locked Axis
[Locked Axis] - The ability of some enemies to move diagonally is severely limited in different ways so they will only move along 1 axis at a time, doing box-like movements instead of moving diagonally (see Double Dragon).
[EXTRA]
Steering Behaviours seem extremely useful. While it's hard to tell if any classic games used this (doesn't seem like it), it's a very useful tool for forcefully un-clumping enemies without building collisions, using it to avoid attacks in the Caution Mode and doing other fancy movement-stuff.
