I need a bit of clarification on something. On the Arduino Ethernet page it says the following:
Each pin can provide or receive a maximum of 40 mA and has an internal pull-up resistor (disconnected by default) of 20-50 kOhms.
Let's take the following example. Pin 6 is high and is tied to ground with a switch between them. If the switch is closed, is the circuit going to output 40 mA and be protected against damage (internal resistance limits the output to 40mA) or should we assume that there is 0 internal resistance and we need to provide a 125 ohm resistor (5V / .04A = 125ohm) to protect the circuit from long term damage?
The 40mA is for the case it's an output. So if you put a HIGH to that pin and you connect for example an LED to that pin, you should insert a current limiting resistor of about 200 Ohm. The same is true if you put a LOW on that pin and connect a load to Vcc, so the sink current is not higher than 40mA (better 20mA, because you should not put 40mA to all pins concurrently).
The internal pull-ups are for the case the pin is configured as an input. In this case you can set it to a default of logic HIGH by activating the pull-ups.
The 40mA figure is the maximum any pin can sink or source without damage. It's up to you to ensure that that limit is not exceeded, so yes you'll need to provide a resistor. It's generally recommended that you don't push it right to the edge either - try to keep it to 20mA.