Be conservative in what you do, be liberal in what you accept from others (often reworded as "Be conservative in what you send, be liberal in what you accept").
Just adding header fields like Accept: */* which could be omitted increases network traffic by 11 Byte for every single request which might lead to performance issues. Having Accept: */* be default in the request might make it hard for developers to get it out of the header in order to save to 11 Byte.
There is a difference between a specification (or a standard) and a de facto standard. Obviously omitting the header field is perfect according to the specification on the other hand a lot of libraries seem to include this and services like the facebook API behave differently this can be seen as a de facto standard being created and you could jump into the loop and be part of creating it.
Bear in mind,"de facto" standards are great when there are no standards ruling. If there is a standard, there is no such a thing as a "de facto" standard, as anything not conforming with the standard is just a violation (an things conforming are just standard). This problem domain we are talking has a ruling standard. Let's just conform to it.
I have some general thoughts on this issue (which might also contribute to the bugfix discussion):
IMO in an RFC, "can" should not automatically be interpreted to "optional", as you are implying. There are key words like "MAY/MUST" for that. So I don't believe your first interpretation is a valid one, though the second quote does backs the optional case. This comment is not to say that that this answer is wrong. Based on the evidence provided, it seems it is optional. All I'm saying is that you should be careful how you interpret "can". That first quote alone, without more context, is ambiguous.
If no Accept header field is present, then it is assumed that the client accepts all media types.
It is interesting that the facebook response differs in both cases but I guess it is their failure of interpreting the protocol correctly. Though on the other side both responses are obviously correct responses to the request (Which I find a funny twist).
The Accept request-header field can be used to specify certain media types which are acceptable for the response.
This means that omitting the header SHOULD be equivalently interpreted by the server as sending Accept: */* in the sense that the client acceptes all media types in both cases.
This means that the header is optional because it says can be used.
When speaking HTTP/1.0: I would send the accept header since you said it is not specified in the HTTP/1.0 RFC and then I think Postel's law becomes more important. On the other side the Accept header is just optional in http 1.0. The Accept request-header field can be used to indicate a list of media ranges which are acceptable as a response to the request Why would you set an optional header by default?
When speaking HTTP/1.1: Even though (1) und (3) speak for fixing the urllib I would probably follow the specification and the performance argument (2) and omit the header. As stated above the response of facebook in both cases is correct since they are allowed to set the media type to whatever they like. (even though this behaviour seems unintended, weird, and by mistake)
as you pointed out ther RFC also says: