Possible error in Ethernet example code??

I've noticed that when I apply the code located at Ethernet - Arduino Reference, my ethernet shield does not function properly.

Specifically the link above suggests the following structure:
Example 1

Ethernet.begin(mac, ip, dns, gateway, subnet);

For me, because I do not use the dns parameter, I would enter the code as follows:
Example 2

Ethernet.begin(mac, ip, gateway, subnet);

But the code that actually works for me is:
Example 3

Ethernet.begin(mac, ip, subnet, gateway);

ie. the gateway and subnet are switched.

While it is true that I do not put anything in for dns, the code will only work for me the way it is shown in Example 3.
I have a hard time imagining that I'm the first to observe this, so it leads me to believe that maybe there is something about dns, subnet and gateway address input to the Arduino code that I am not grasping.

Has anyone else observed this, or perhaps can tell me what I'm missing in this picture? perhaps something to do with dns?

BTW, I am using an Arduino Uno w/ Ethernet shield.

This is from the library file:

  int begin(uint8_t *mac_address);
  void begin(uint8_t *mac_address, IPAddress local_ip);
  void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server);
  void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway);
  void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);

There is no begin method that will only take mac, ip, gateway, and subnet, in either order you mentioned. Why are you not using begin(mac)? Can't you get these addresses automatically assigned to your shield?

Client test code if you are using an w5100 based Ethernet shield.

//zoomkat 9-22-12
//simple client test
//for use with IDE 1.0.1
//with DNS, DHCP, and Host
//open serial monitor and send an e to test
//for use with W5100 based ethernet shields
//remove SD card if inserted

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address

char serverName[] = "web.comporium.net"; // zoomkat's test web page server
EthernetClient client;

//////////////////////

void setup(){

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    while(true);
  }

  Serial.begin(9600); 
  Serial.println("Better client test 9/22/12"); // so I can keep track of what is loaded
  Serial.println("Send an e in serial monitor to test"); // what to do to test
}

void loop(){
  // check for serial input
  if (Serial.available() > 0) //if something in serial buffer
  {
    byte inChar; // sets inChar as a byte
    inChar = Serial.read(); //gets byte from buffer
    if(inChar == 'e') // checks to see byte is an e
    {
      sendGET(); // call sendGET function below when byte is an e
    }
  }  
} 

//////////////////////////

void sendGET() //client function to send/receive GET request data.
{
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /~shb/arduino.txt HTTP/1.0"); //download text
    client.println("Host: web.comporium.net");
    client.println(); //end of get request
  } 
  else {
    Serial.println("connection failed"); //error message if no client connect
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //waits for data
  while (client.connected() || client.available()) { //connected or data available
    char c = client.read(); //gets byte from ethernet buffer
    Serial.print(c); //prints byte to serial monitor 
  }

  Serial.println();
  Serial.println("disconnecting.");
  Serial.println("==================");
  Serial.println();
  client.stop(); //stop client

}