Rinse asparagus. Snap stems to separate tender stalks from white, woody ends. Bring broth and lemon juice to a boil and add end pieces. Reduce heat to a simmer and cook end pieces in broth for about 30 minutes. Lift end pieces from broth with a slotted spoon and discard them, reserving broth.
Trim tips from remaining stalk pieces and reserve them. Cut remaining green stalks into pieces about 1/2 inch long. Bring reserved broth back to a boil and add asparagus tips. Cook tips until tender, about 1 minute. Remove tips from broth with a slotted spoon and place them in a bowl of ice water to chill quickly and stop the cooking. Drain tips on a paper towel.
In a clean stockpot, melt butter over medium heat and add onion and garlic. Cook until fragrant and translucent, about 1 minute. Add chopped asparagus stalks and cook for about 2 minutes or until slightly tender. Add broth and bring mixture to a simmer. Simmer until asparagus pieces are very tender, about 15 minutes. Remove from heat.
Puree broth mixture in small batches in a food processor or blender until soup is smooth. Add salt and pepper to taste. Return pureed mixture to the stockpot along with reserved asparagus tips and cream. Heat to serving temperature. Garnish with Parmesan cheese before serving.
Note: This soup takes a little time, but it can be made a day in advance of serving and stored in the refrigerator. If you make it in advance, wait to add the reserved asparagus tips and cream until it is reheated just before serving.