In a nonreactive saucepan, combine 2 cups milk and sugar. Bring the liquid up to a boil to dissolve the sugar, reduce to a simmer. Whisk in the chocolate pieces and whisk until the chocolate is completely melted. In a small bowl, whisk the yolks together.
Temper the yolks into the chocolate mixture. In another small bowl, whisk the remaining milk and cornstarch together for a slurry. Slowly add the slurry into hot chocolate mixture and mix thoroughly. Bring the liquid up to a boil and cook, stirring constantly until the mixture is thick. Remove from the heat and stir in the vanilla and butter.
Pour the pudding into a glass bowl. Place a piece of plastic wrap directly on top of the pudding to prevent a film from building. Place the pudding in the refrigerator and cool the pudding completely. Whisk the pudding until light and fluffy. Pour the pudding into 4 wine glasses and place in the refrigerator. Top each pudding with the whipped cream and garnish with chocolate shavings.