Cut about 1/2-inch off the tops of three of the whole onions. Peel off the papery outer leaves. Trim the root ends, but leave them intact. Turn one of these onions so it rests on its top. Cut two thin (about 1/4-inch) slices from the center of the onion, cutting down from the root end to the onion top. Be careful to keep these slices intact. Repeat with remaining 2 onions to give a total of 6 thin, center-cut onion slices. Set remaining onions aside.
In a large skillet, heat 1 tablespoon of the oil or margarine. Carefully add the 6 onion slices in a single layer. Cook, uncovered, over medium heat for 3 to 4 minutes or until golden brown. Turn carefully with a wide metal spatula. Cook about 3 minutes more or until golden brown on second side. Carefully remove from skillet and drain on paper towels.
Thinly slice remaining onion portions. Halve and cut remaining whole onions into thin slices. You should have 6 to 7 cups onion slices. In a 4- or 4-1/2-quart Dutch oven, heat the remaining 2 tablespoons oil over medium heat. Stir in the sliced onion and halved shallots. Cook, uncovered, over medium heat for 20 to 25 minutes or until onion is tender, stirring occasionally. Increase heat to medium-high and cook 5 minutes or until onions are golden brown, stirring occasionally.
Stir broth and wine, if using, into onions in Dutch oven. Heat through. Season to taste with a little salt and pepper.
Meanwhile, place bread slices on rack of broiler pan. Place under broiler, about 4 inches from the heat, about 1 minute or until lightly toasted. Turn bread over; top each piece with a slice of cheese. Broil for 1 to 2 minutes or until cheese just begins to melt.
To serve, ladle soup into bowls. Top each with a piece of cheese toast. Add a caramelized onion slice and green onion tops.