Polymorphism is a characteristic or feature of programming languages. Programming languages either support it or they don’t. Since programming languages fall under the umbrella of sometimes substantially different paradigms, different paradigms (functional programming or object oriented programming) may have slightly different interpretations and applications of HOW polymorphism is expressed in that particular paradigm.
As far as I know, in OOP polymorphism is considered one of the basic principles and a very distinctive one. Most of the object oriented languages have polymorphism among its many features. In a nutshell, polymorphism is best seen when the caller of an object with polymorphic implementation is not aware of the exact type the object is. Is is often a consequence of inheritance and casting, is also called subtype polymorphism, and works through the use of vTables.
I share the idea (along with many authors) that operator overload is a manifestation of polymorphism. So if you overload the == operator to take TypeA == TypeB, you are effectively interpreting TypeB as a TypeA if you are comparing elements in a list containing random elements of types A or B, you don't really care what comes in, since they can all be treated for equality. Like many other debates this one has defenders and haters.
But that's the end of the story for OOP.
In functional (declarative) languages (Lisp, F#) since the first class citizens are functions (vs Objects) polymorphism is expressed through relationships between functions and is manifested a bit differently. See Type Polymorphism
The last word I want to put out there is that I love Wikipedia as much as the rest, but you must always take articles with a grain of salt and never trust them blindly without confirming other sources. If you want to get the truth about the true principles of OOP, you should start here:
Object-Oriented Software Construction (Bertrand Meyer)