My wife and I expatriated to Mexico 16 years ago from pre retirement life in Illinois. We regularly hear the word "Gringo" and understand its intent. Despite white skin, a national origin deservedly not well looked upon, and stumbling but trying language, Mexican friends may non maliciously refer to us as "gringos" while embracing our hearts as Mexican. It is a different world with different values, and one's heart has more importance here than what one is and where they were.
"Gringo" is not necessarily a derisive name. One problem is that people from the country between Canada and Mexico really have no name. You may use "American" and think it describes you. But to someone of another country it may not. That's because it also applies to Argentina, Brazil, Canada, and yes Mexico. It is the name of the continent.
OK, so how about North Americans? In Mexico the word "norteamericano" is sometimes used on documents such as visas. Trouble is that also includes Mexico, Canada, and Iceland, all part of the same sub-continent. Well then does "United States" cut it? Not quite, though on some official documents we are referred to as estadosunidienses, or united statesers in translation. But even that falls short. What you call Mexico is really Estados Unitdos Mexicanos or The United States of Mexico. It's their name too. (And, yes we have them, 31 not counting Texas, New Mexico, Arizona, Utah, Nevada, California, and Oregon.)
So what's left? Gringo works fine.
Mexican Spanish is a different kind of language than English. Translation and understanding of meaning is not simply a matter of replacing word for word. The culture of the person using a word, the context in which it is used, its intensity, and body and facial expressions can cause a word here to take on many meanings. That is much more true of Spanish than English. An example in English might be the expression SOB. You might meet an old friend saying "How ya doin' you old SOB?" with no problem. One the other hand, shouting "Cut it out you stupid SOB" could start a fight. A mild swear name is Cabron. It literally means Big Billy Goat but sort of corresponds to the English SOB. Ay Cabron, como estas? is ok to a friend. "Tu pinche cabron" in reply to a display of arrogance is an insult.
The point of the above is that English words tend to have distinct meanings. Written English makes for easy communication. With Spanish it's more difficult. The language is more emotional and word meaning varies. In order to communicate in written Spanish it is necessary to write in a very formal and flowery style. In conversations among gringo strangers we say what we mean and be done with it. With Mexicans that would be unfriendly and rude. One talks around the point until the meaning is clear. The relationship and feelings between the people communicating become as important, or even more so, than the words used and their literal intent.
There are also cultural differences in what it is ok to refer to. You won't call someone Fatso. In Mexico, Juan el Gordo is simply a description that you're talking about the fat Juan, not the skinny one. It's the same with the word gringo. Depends on whose using it in reference to who and how. If someone spits out "Tu pinche gringo" with a snarl, you are being insulted. Es gringo listo, or He is a smart gringo, is simply a description.
Languages are not just collections of words with varying spelling and arrangement but also carriers of a culture. The use of words can only be fully understood from within the culture. To view language from the perspective of a foreign culture is to mistakenly attach aspects of the foreign culture to the meaning. The same confusion arises between various cultures using the English language. That's true even across different parts of the US. The same is true of Spanish. Mexico is also a large country like the US, and it has many subcultures. Same confusion. The way out is to hang loose and don't assume what you think is meant is what is necessarily intended. Get it said several times.
Part of the confusion for Americans with regard to "gringo" could be due to their history. Bigotry has always used words such as such as Mic, Dago, Kike, Nigger, Polack, Redskin and the list goes on. The intent is always hateful. It is natural therefore for a person of the US culture to assign the same implication to the word gringo. From the perspective of the Mexican culture, however, it isn't necessarily so.
DU wouldn't let me have the name my parents gave me, George W, on first sign in, saying it was already taken. Then I tried George W II, posted a couple, and quickly realized it was a bad choice. On final try, and I came up with our dog's name, Pocho, and it stuck. The word does have meaning besides a misspelling of "Poncho, the common nickname for Fransisco.
The word "Pocho" derived from the verb "Pochar" of the Ocetl natives of Sonora. It meant to cut the crops and was applied to persons who worked across the border as field hands. Over time it came to be used as a not so nice word Mexicans used for Mexicans who went to the United States. Pocho was born and lives in Mexico but has traveled with us to the US. So Pocho is a pocho. He illustrates sharing our politics by urinating on as many bushes as possible. Currently, the word "pocho" is usually applied to persons of Mexican heritage who live in the US. Even the not so nice aspect is disappearing. As evidence, US citizens of Mexican ancestry have taken it to themselves as a matter of pride, much as blacks once decided that name was preferred to the white applied moniker of "Negro". An example of that can be seen on the hilarious and hard hitting satirical and political Pocho web site
http://www.pocho.com/ (in which I have no personal interest). It's worth a look.