Even if the standard allocator does not use the size of the memory block that is to be freed, other allocators might. Therefore, the argument has to be there such that all STL code that uses allocators can use different allocators in the same way.
The standard allocator does not need the size argument because it remembers the size of each allocated block. However, this adds quite a bit of overhead to each allocation.
If the user of the allocator knows how large each block of memory is (this is very often the case), then one can use a custom allocator which saves this overhead, and tell the deallocate
function about the size of the block instead.