Preheat the oven to 350 degrees F.
Grease a 9 by 13-inch baking dish.
Bring a medium pot of water to a boil. Add the spinach and cook until just wilted, about 30 seconds. Drain and rinse with cold water. Once cool, squeeze as much water from spinach as possible then roughly chop and reserve.
Heat the olive oil in a large skillet over medium-high heat. Add the onions and cook until golden brown and tender, about 5 minutes.
Add the garlic, salt and pepper and cook, stirring, for 30 seconds.
Add the artichokes and cook, stirring, another 2 minutes.
Remove from the heat and reserve.
Whisk the eggs in a large mixing bowl.
Add the soy milk and lemon juice.
Stir in the bread, spinach, artichoke mixture, 2 tbsp Parmesan and (optional) rosemary and stir to combine.
Let the bread rest in the custard for 30 minutes.
Pour the bread pudding mixture into the prepared dish.
Sprinkle remaining 3 tbsp Parmesan over the top and drizzle with remaining 1 tbsp olive oil.
Bake until firm in the center and golden brown, about 50 minutes. Serve warm.