Melt the butter in a large pot and simmer the onion until very soft. Add a little water to steam onion and avoid browning. Stir often.
Stir in flour to blend. Add chicken stock. Whisk and bring to a boil. Simmer soup for 10 minutes.
Meanwhile, trim the asparagus spears, discarding the tough woody ends. Wash and chop spears into 1/2-inch pieces and cook in salted boiling water until tender. Drain and cool under cold water.
Place asparagus in a blender, mixing in batches, and puree adding a little water if necessary. Strain asparagus puree through a strainer. Reserve in a bowl.
Cool soup, and puree in a blender. Strain and return to a soup pot.
To serve hot:
At serving time, heat soup and asparagus puree in separate pots.
Just before serving add the green asparagus puree to soup. If serving into individual soup plates, swirl the green puree in soup to get a decorative effect.
To serve cold:
Spoon soup in into individual soup plates, swirling spoonfuls of the asparagus puree into the soup.