In a medium saucepan, whisk together the sugar, cornstarch, and salt.
Gradually whisk in the milk until the cornstarch is fully dissolved with no lumps.
Place the saucepan over medium heat and cook, whisking constantly, until the mixture begins to thicken and comes to a gentle boil, about 8-10 minutes.
In a small bowl, lightly beat the egg yolks. Slowly pour about 1/2 cup of the hot milk mixture into the yolks while whisking constantly to temper them.
Pour the tempered egg yolk mixture back into the saucepan, whisking continuously. Cook for another 2 minutes until thick enough to coat the back of a spoon.
Remove from heat. Stir in the lemon juice, lemon zest, butter, and vanilla extract until the butter is melted and everything is smooth.
Pour the pudding through a fine-mesh strainer into a bowl or individual serving dishes. Press plastic wrap directly onto the surface to prevent a skin from forming.
Refrigerate for at least 2 hours until fully chilled and set. Serve topped with whipped cream.