Place the tin of condensed milk on its side in a large saucepan. Cover with water so it is submerged by at least 5cm. Bring to a simmer, then leave to simmer for 3 hours, topping up the water regularly so the tin remains completely submerged. Carefully remove the tin from the water. Allow to cool before opening. Spoon into a bowl and whisk until smooth. You'll only need half the resulting dulce de leche in the pudding; the rest will keep in an airtight container for up to 5 days.
Grease a 1.5 litre (6 cup) steamed pudding basin and line the base with baking paper. Beat the butter and sugar together in a bowl. Beat in the vanilla and eggs, one at a time, until fluffy and well combined. Sift the flour and cocoa powder together and mix in the chocolate melts. Fold into the egg mixture with the milk until combined. In a separate bowl, mix the dulce de leche and peanut butter together.
Spoon half the chocolate mixture into the pudding basin. Spoon in the dulce de leche mixture, then cover with the remaining chocolate mixture. Grease a sheet of baking paper and use it to cover the top of the pudding basin. Top with two layers of foil, then secure with string.
Fill a large saucepan one-third full of water and bring to the boil. Reduce the heat to a simmer. Place the pudding basin in the saucepan and cover with a lid. Gently simmer for 1 hour 20 minutes, or until a skewer inserted into the top of the pudding, through the foil, comes out almost clean, but a little fudgy.
Carefully remove the pudding from the water, then remove the string, foil and paper. Invert the pudding on to a plate. Slice into wedges and serve with thick cream.