The SD library has a long history and many of the examples are out of date or just plain wrong.
This comment is wrong.
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);
The SD library always sets SS high as an output so no code is needed for that purpose. Here is the code from Sd2Card.cpp in IDE version 1.01.
// SS must be in output mode even it is not chip select
pinMode(SS_PIN, OUTPUT);
digitalWrite(SS_PIN, HIGH); // disable any SPI device using hardware SS pin
Future versions of the SD.h library will use the SPI.h library and it also makes SS as an output. Here is code from the 1.5 SPI.h library.
// Set SS to high so a connected chip will be "deselected" by default
digitalWrite(SS, HIGH);
// When the SS pin is set as OUTPUT, it can be used as
// a general purpose output port (it doesn't influence
// SPI operations).
pinMode(SS, OUTPUT);
Here is the reason you may need to make some pins outputs and high. If you have more than one device on the SPI bus, you must disable all devices other than the SD by making their chip select pin an output and high.
For the Ethernet shield, pin 10 is chip select for the Ethernet controller and pin 4 is chip select for the SD card. So you should make pin 10 an output and set it high to disable the Ethernet controller, not because pin 10 is SS.
Much confusion results from the fact that on 328 Arduinos pin 10 is also SS. On the Mega, people change the 10 to 53, the SS pin for the Mega, and then the SD on the Ethernet shield will not initialize. The problem is that the Ethernet controller is no longer disabled on the Mega.
For the Ethernet shield you must always make pin 10 an output and high before initializing the SD card. It has nothing to do with SS.