Unbeknownst to Ash, one of the ghost Pokémon decides to join Ash and friends on their journey and more importantly help Ash battle the powerful Saffron City Gym Leader. Ash returns to Saffron City with one goal, to win a gold badge. The scene is set and Ash and the young girl are once again face to face when suddenly, Ash's ghost Pokémon is nowhere to be found. Feeling completely humiliated, Ash leaves the gym. Brock and Misty are left behind and as a result, the young girl uses her powers to turn them into miniature dolls, rendering them helpless. The mysterious man from Ash's previous encounter with this baffling Gym Leader shows up providing Ash with some information that could ultimately be the key to defeating her. Determined to rescue Brock and Misty, Ash returns to the Saffron City Gym ready to do what it takes to win and save his friends. Just when his attempt seems hopeless, the ghost Pokémon shows up with a unique combative technique. Will this be enough to rescue Ash's friends as well as the young Gym Leader from her dark and lonely world?
Ash and his friends return to Saffron City with Haunter in tow. Though Ash is confident, Brock is somewhat afraid of Haunter, while Misty is not, and she even considers Haunter cute. Haunter nudges Misty and licks her face, paralyzing her. Ash scolds it and Haunter cries, but Ash reassures it, the Pokémon quickly perking up. Ash asks Haunter for help against Sabrina, and it agrees to.
Ash and his friends return to the Saffron Gym as Ash remembers the last match. He is ready to go inside, but he notices that his friends and Pikachu do not want to go in, based on what happened last time. Ash believes he will win, but Brock thinks Haunter is controlling Ash. Haunter appears not to be, laughing continually. Ash brings out Charmander, Squirtle and Bulbasaur and they prepare to go inside. Everyone returns to the stadium, as Ash demands a rematch. Sabrina agrees and sends out Kadabra. Ash attempts to send out Haunter, but Haunter has disappeared. Ash freaks out, losing his confidence. Sabrina orders Ash to send out another Pokémon, reiterating her threat. Ash tries to send Pikachu, but he backs away to the wall, scared. His other Pokémon do the same, not wanting to battle. Sabrina is intensely angry as Ash decides to back out, running away and everyone follows him. The exit seals off as the little girl appears from behind, using telekinesis to turn Brock and Misty into dolls. The little girl appears in front of them as Ash's Pokémon hide behind him. The man that told him to find the Ghost-type Pokémon before appears and teleports them out.
They reappear in the city and they all drop into a pile atop the man. Ash's Pokémon relax as Ash reflects on how mean Sabrina is. The man mentions that Sabrina was not always mean. Flashbacks reveal Sabrina as a young girl using telekinetic powers on everything, honing her skills at the cost of turning against her parents. The conflict caused her to split into two girls, the older Trainer and the lonely little girl. The little girl is actually a doll representing Sabrina before she practiced telekinesis. Ash notices that the picture he showed is the same one they saw in Sabrina's toy box. The man believes that Ash has found out that he is really Sabrina's father, but Ash thinks he is a photographer. Pikachu laughs and the man is somewhat astounded that Ash is that oblivious. Sabrina's father asks why he does not have a Ghost Pokémon as Ash mentions that Haunter disappeared. He must find Haunter in order to free his friends.
Ash and Pikachu scan the city for Haunter. Meanwhile, Team Rocket is alongside a skyscraper on a window cleaner platform. James readies the fishing net in order to capture Pikachu, but Haunter appears in front of them, scaring Team Rocket and causing them to fall off the platform. Jessie grabs hold as everyone else clings onto her. She cannot pull up because they are too heavy. Haunter appears next to Jessie and makes funny faces, trying to get her to laugh. She tries to resist because she will let go if she laughs. Eventually she cracks, laughing and releasing her grip. Ash and Pikachu notice that Team Rocket have crashed through the sidewalk and Haunter appears nearby. After thanking Haunter for stopping Team Rocket, Ash expresses his desire to go back to the Gym, but Haunter does not want to battle. However, Haunter comes up with an idea and sides with Ash again as they return to the Gym.
Meanwhile, Misty and Brock, now as dolls, are sitting on a couch, unable to move. They notice another doll nearby as they realize that it is Sabrina's mother. They are shocked as she reveals that Sabrina is still good. The roof opens as the Sabrina doll looks down upon them. Misty demands a battle and for them to change them back, but she doesn't want them to change. At that moment, Ash returns and asks for another match. Sabrina sets Misty and Brock on her chair to watch. Misty and Brock protest, but Ash is set to battle. Kadabra comes back out as Ash orders Haunter to go, but it has disappeared again. Ash falls to the floor in defeat, but Pikachu steps out to battle, even though Ash knows Pikachu is at a disadvantage. Its insistence convinces Ash and the match begins. Pikachu uses Thunder Shock, but Kadabra Teleports to avoid it and then uses Psybeam on Pikachu. Pikachu gets back up and uses Thunderbolt, hitting Kadabra, but it uses Recover to heal.
Suddenly, Haunter appears in front of Sabrina and laughs. The doll believes that it is unfair to pit two against one, but Sabrina's father reappears and says that Haunter is playing on its own, not battling, so it is not against the rules. Haunter makes funny faces and even pulls out a bomb, exploding it in front of Sabrina. The effort works as Sabrina cracks a smile, progressing to hysterical laughter. Sabrina's father seems happy at her breakthrough, but Ash is still unconvinced that he is her father, making him angry. However, he notes that Haunter has helped Sabrina. Ash is still angry that he did not win, but Sabrina's father points to Kadabra rolling on the floor laughing, since Sabrina and Kadabra are joined telepathically. Sabrina's doll disappears and drops Kadabra's Poké Ball, with Misty and Brock returning to their human forms. Sabrina's father promptly declares Ash the winner.
Ash and his friends leave Saffron City, waving goodbye to Sabrina, her parents, and Haunter, who has decided to stay with Sabrina. Ash glances at his new Marsh Badge, still doubtful that he deserved it. Brock and Misty reassure him that it was a just victory and make light of the unusual circumstances. The group then makes plans to head for the next Gym in Celadon City. Meanwhile, Team Rocket is frozen in the pothole as it is being slowly filled with cement. However, they manage to jump out in time and run down the same direction as Ash and his friends.
For unspecified reasons, both Sabrina and Ash state that Ash caught Haunter in this episode, but Haunter had not been seen in a Poké Ball in either episode.
The Marsh Badge that Ash earns in this episode is his fourth Badge. However, in a rare deviation from the traditional sequence of Gyms, the Marsh Badge is officially the sixth Badge that the player earns in the games.
Near the end of the episode, when Ash and his friends are waving goodbye, Ash's "z's" are missing, as well as the lines on his and Misty's ears. This error is present all the way to the end of the episode.
In the dub, the narrator claims that Ash returned for the biggest showdown in his life, while in the Japanese version, he simply says that Ash returned to Saffron City.
The signs that Misty, Brock, and Pikachu hold when they are reluctant to enter the Gym were translated in the dub to "Go Ash Go!" (Brock), Ash's face (both Misty), and "Good Luck" (Pikachu). Originally, they said "Never Give Up, Ash", "Guts" (left), and "Do Your Best" (right) for Brock and Misty's signs, respectively, whereas Pikachu's sign was the same as the dub in terms of translation.
Brock says to Ash after he tells them about how Haunter will make sure that Ash wins against Sabrina: "I wouldn't be too sure, Ash. What if Haunter's the one controlling you?" Originally, Brock just reminds Ash that he should keep an eye on Haunter so that it won't disappear on him.
In the dub, Ash believed that the man knew so much about Sabrina because he was her photographer, while in the Japanese version, Ash believed that he is a neighbor of Sabrina's.
Originally, the egg that falls on Team Rocket was meant to be an egg of Columbus, and James explains what an egg of Columbus was, followed by Jessie saying that she thought it was in reference to Christopher Columbus liking eggs. This was changed by the dub to a variation of the "Which came first: the chicken or the egg?" argument.
In the Japanese version, when Ash and his Pokémon end up on Sabrina's father's back, Ash tells Pikachu to not "pika pika" him and demands Pikachu to get off. In the dub, Ash tells Pikachu he's happy he's safe and asks Pikachu kindly to get off his back.
In the dub, Brock says he is allergic to ghosts, while in the Japanese version, Brock says he cannot get used to Ash's new friend.