Exactly. Each of the derived drivers implement behavior that is specific to that driver. The OpenGL driver makes lots of glWhateverFunction type calls, and the D3D drivers make pID3DDevice->WhateverFunction calls. Obviously those functions could not be put into the base class.And you will see that they all have a function body with driverdependent code ...
As mentioned before the functionality that is in the null driver is common to all of the drivers. Some methods are unnecessarily duplicated, but for the most part the null driver class does provides shared functionality.
All of the external mage loader and image writer functionality is there, the texture cache management, image loading, fps counting, light management, material renderer management, material serialization...
As an example of why it is necessary, the function draw2DPolygon() is not implemented in any derived driver. Neither are draw3DBox(), draw3DTriangle(), makeNormalMapTexture() and createImageFromFile().
So, in summary... The dependency on null driver is there because it is a repository for code that is common to all of the currently implemented drivers. Because the derived drivers [OpenGLDriver, D3D9Driver, ...] inherit from the null driver, they don't need to reimplement those shared methods. You can reimplement those methods in the derived class, but it is not required.
Sometimes methods are reimplemented in the derived class because the derived class can sometime do things better than the base class implementation, or the derived class needs to do something a little differently. The null driver implementation of draw2DLine() does nothing. If the derived class didn't reimplement it, then nothing would be drawn. Drawing a line is driver specific, so it couldn't be written in the null driver class.
Why does all of this matter to you anyways? From a coders perspective, the derived driver looks just the same if it implements all of the functionality itself or if the functionality is inherited. From your perspective, you get a pointer to an IVideoDriver and that is all you really need to worry about.
This is about as simply as I can explain it.