Preheat your oven to 350 degrees F. Coat a 9-inch x 9-inch baking dish with non-stick cooking spray, and set aside.
Place the bread pieces in a large mixing bowl.
In a medium mixing bowl, whisk together the milk, eggs, vanilla, and brown sugar, being sure the brown sugar is broken up and fully incorporated. Pour in the butter slowly while whisking constantly.
Add the cinnamon and salt to the custard and whisk to combine.
Pour the custard over the bread, and use a wooden spoon to gently fold the bread into the custard until it is completely coated.
Pour the apples and nuts in with the bread. Gently stir again to combine.
Pour everything into your prepared baking dish. There will be a lot of liquid, that's okay.
Bake for 45 to 55 minutes, or until the top is golden, the apples are tender, and the center is set. I like my bread pudding a little soft under the top layer when I pull it out of the oven.
Carefully remove the dish from your oven and place on a cooling rack. Let the bread pudding rest 10 to 15 minutes. DO NOT skip this step! The pudding needs to set up a bit before you start serving it.
Drizzle the top of the bread pudding with caramel sauce, as much as you like.
Spoon the pudding onto servings plates and serve warm. I like mine topped with a big scoop of vanilla ice cream and a little more caramel sauce.
If you'd like to make this pudding in a 9-inch x 13-inch dish for more people, increase the bread to 7-8 cups (a whole baguette) and add and extra 1/2 cup milk to the batter. Bake for 40 to 50 minutes, checking towards the end of the cooking time so the pudding doesn't over cook.