Im a little curious about this requirement... loading the ethernet library uses a good ammount of space, especially if you are not going to be using it. I guess I am wondering why you wont be there to check if it has the shield when you plug it in for use.
Given that the ethernet module communicates over the SPI bus, I thought you may be able to see if it is there by just peeking at a register over SPI (using the SPI library, if you want), but I looked through the W5100 datasheet, and there doesnt appear to be any sort of generic status register. Thus, I think your best bet would be to try to connect using client connect Ethernet - Arduino Reference , as it is the easiest ethernet library function that returns something. In your code to test for the presence of the ethernet shield, try to initialize it with proper IP and MAC settings and declare a client for a known good host on port 80 as shown in the above function's example page. Then, do something like this:
boolean ethernetPresent = client.connect(); //Client.connect returns a 1 if successful, meaning a true for ethernetPresent, if it is unsuccesful, there is no shield.
One issue with this approach is that if there is a different device connected to the SPI bus, it might behave oddly recieving commands for the ethernet shield.