Preheat oven to 350°F (175°C). Grease a 9x13-inch baking dish with melted butter and set aside.
Spread bread cubes on a baking sheet and let them dry out for 2-3 hours at room temperature, or toast at 250°F for 10 minutes until slightly crisp but not browned.
In a large saucepan over medium heat, whisk together the milk, heavy cream, and cocoa powder until smooth and steaming, about 4 minutes. Do not let it boil. Remove from heat.
In a separate bowl, whisk the eggs and sugar vigorously until pale and slightly thickened, about 1 minute. Slowly pour the hot chocolate mixture into the eggs while whisking constantly to temper them.
Stir in the vanilla extract and salt until fully incorporated. The custard should be smooth and glossy.
Place the dried bread cubes in the prepared baking dish and scatter the chopped chocolate evenly throughout. Pour the custard mixture over the bread, pressing down gently with a spatula to ensure all pieces are submerged.
Let the mixture rest for 30 minutes at room temperature, pressing down occasionally so the bread absorbs the custard completely.
Bake uncovered for 45-50 minutes, until the top is set with a slight jiggle in the center and the edges are crispy and pulling away from the sides.
Remove from oven and let cool for 15 minutes before serving. The pudding will firm up as it cools but remain creamy inside.