Preheat the oven to 350 degrees F.
Line a baking sheet with foil. Place the shallots and garlic on the sheet and lightly spray with oil. Cover with additional foil, crimp the edges, and poke a hole in the top and roast 45 to 50 minutes or until very soft.
Set aside until cool enough to handle, then peel. The onions and shallots may beprepared ahead and refrigerated, covered for up to 4 days.
In a food processor or blender, puree the shallots, garlic, lemon juice, 2 tablespoons of the walnuts, and the oil until smooth. Add the water or stock gradually until it is the desired thickness. (If using, Salt and pepper to taste).
In a small saucepan lightly sprayed with oil, over low heat, cook the shallot mixture, stirring occasionally, until warmed through.
Meanwhile, in a large nonstick skillet,
heat 1/2 inch water to boiling. Add the asparagus and reduce heat; cover and simmer for 4 to 6 minutes.
Drain and place the asparagus on a serving platter or individual serving plates.
Top with the warmed shallot sauce,
sprinkle with lemon juice or vinegar, and garnish with the remaining 2 tablespoons of chopped walnuts.
Serve immediately.