For the celery root puree: Put the celery root in a large, heavy-bottomed saucepan and add enough milk to just cover. Bring to a boil, and then lower the heat, sprinkle with salt and pepper, and simmer until the pieces are very tender to a knife tip, about 25 minutes. Strain through a fine-mesh strainer set over a bowl and reserve the milk.
Transfer the celery root to a blender and puree, adding the reserved milk 1 tablespoon at a time if the blade stops spinning. Add the butter and puree until the mixture is silky and very smooth.
For the cod: Preheat the oven to 375 degrees F. Heat the canola oil in a saute pan over medium-high heat. Sprinkle the fish with salt and black pepper, place into the hot oil, and sear for 2 minutes. Transfer to the oven until just cooked through, 5 to 7 minutes.
Add the olive oil to another pan over medium heat. Add the shallots and cook for 1 minute, and then stir in the artichokes, tomatoes, white wine and garlic. Cook until the wine is reduced by half, and then pour in the fish stock. Cook until the stock is reduced by half, and then add the olives, piquillo peppers, parsley and lemons. Swirl in the butter to thicken. Season with salt and black pepper.
To serve, spoon about 1/2 to 3/4 cup of the celery root puree onto each plate and place a piece of cod on top. Top with some of the artichoke and olive sauce.