Crack the eggs into a medium bowl and season with salt and pepper. Beat the eggs vigorously until well combined. Set aside.
Place the skillet over medium heat and add the olive oil. Once the oil is hot, sauté the shallots for a minute or two and then add the asparagus. Season with salt and pepper. Stir the asparagus around for about 2 to 3 minutes, or until it is bright green and tender-crisp. Remove the asparagus and shallot mixture from the skillet and set aside.
When the skillet is cool enough to handle, thoroughly wipe out all of the cooking residue with a damp paper towel. Place the clean skillet back over medium heat.
Once the pan is hot, add the butter. After the butter has melted and the foaming has completely subsided, add the beaten eggs. Let cook undisturbed briefly, until the edges begin to set.
With a spatula, begin pulling the cooked egg away from the sides of the skillet and towards the center of the pan. Then gently tilt the pan from side to side, allowing the raw egg to run out to the sides of the skillet and become set. Continue pulling the egg away from the sides while tilting the pan to allow the raw egg to run to the edges until you have a somewhat fluffy, but not thoroughly set, layer of egg spread relatively evenly across the pan.
Sprinkle the cooked asparagus and shallot over the eggs. Then evenly dollop the whipped goat cheese or sprinkle the shredded gruyère over the top. Let cook undisturbed for another minute or two until the egg looks just set (and if using gruyère, the cheese is mostly melted).
Slide the omelette out of the skillet and onto a plate, using the edge of the pan to fold it over in half.
Sprinkle with parsley and serve immediately.