Melt the butter in a heatproof bowl over a saucepan of hot (not simmering) water. Add the chocolates and stir until melted and smooth. Remove the bowl from the saucepan.
Heat the milk and 1/3 cup of the sugar in a saucepan over medium heat until it is steaming.
Whisk the remaining 2/3 cup sugar, the cocoa, cornstarch and salt in a medium bowl. Whisk in the eggs, egg yolk and cream. Gradually whisk in half of the hot milk mixture, then pour into the saucepan with the remaining milk mixture, whisking constantly. Bring to a boil, whisking oftenand scraping the side of the saucepan. Reduce the heat to low and let bubble for 30 seconds.
Remove the saucepan from the heat. Strain the pudding through a sieve into a medium bowl. Whisk in the melted chocolate mixture, rum and vanilla. Spoon the pudding into 6 jars or bowls. Cover each with plastic wrap, pressing it directly on the surface and piercing it a few times with the tip of a small knife. (If you like a skin on your pudding, do not cover.) Let the pudding cool at room temperature until tepid, about 1 hour, then refrigerate until chilled, at least 2 hours. (The pudding can be refrigerated for up to 3 days.) Remove the plastic wrap and top with whipped cream and shaved chocolate.