The Transform empty move glitch is a natural glitch which can occur in Pokémon Red and Blue and Pokémon Yellow.
When a Pokémon under Transform's effects uses Mirror Move or Metronome, the move in the same slot of the Pokémon's non-Transformed moveset will gain one PP.
If that slot is empty (for example, the Pokémon only knows two moves but has Mirror Move in its third or fourth slot after using Transform), then the Pokémon will permanently lose the ability to use Struggle. In addition, if Disable is used while all the Pokémon's moves have run out of PP, the game will softlock. This state is not removed by healing at a Pokémon Center.
Fixing the glitch
The glitch can be undone by overwriting the Pokémon's glitched empty slot (by learning a new move in this slot), or repeating the glitch 256 times total on the same move slot (including the time that glitched out the empty slot).
The game has a function that performs a move; this function includes decrementing the corresponding slot's PP; this is performed both on the Pokémon's data in the party, and on the temporary copy the game creates for battles.
When a Pokémon uses Transform, the game overwrites its move data in the Pokémon's temporary battle copy. Every time the attack function decrements PP, it checks if Transform is in effect, and if so, doesn't touch the Pokémon's data in the party (since the moves being modified aren't the Pokémon's anymore.)
In Generation I, the moves Mirror Move and Metronome draw 2 PP from their assigned slot when used (once when using the move itself, another time when using the actual move). To "fix" this, the game gives back 1 PP to the slot Mirror Move or Metronome is in; however, this doesn't check for the Transformed status, so the Pokémon's PP in the party get erroneously modified.
If an empty slot gains non-zero PP in this way, Struggle cannot be used anymore due to the game finding a non-zero-PP move slot. Additionally, Disable softlocks, because its intial failure check looks for a non-zero-PP slot (which it finds), but it then tries to pick a non-empty move with non-zero PP (which there aren't).