The ??? type is neutrally effective against all types, and all types are neutrally effective against it.
In the games
The move Curse was given the ??? type when introduced in Generation II, likely because of its mysterious nature. It is so far the only move which completely differs in its use between Pokémon of different types. Its type was changed to the Ghost type in Generation V.
Conversion cannot be used to become ???-type: Curse, the only move of this type, will be ignored by Conversion, such that if a Pokémon uses Conversion while the only other move it knows is Curse, Conversion will fail.
It is a Normal-type move in the early Pokémon Mystery Dungeon series, but was changed to be a Ghost-type move in Pokémon Mystery Dungeon: Gates to Infinity. It was also a Normal-type move in all Pokémon Mystery Dungeon (WiiWare) games.
Pokémon Eggs are displayed as being ???-type in Generation III on their status screen, to maintain the fact that the identity of the Pokémon inside is supposed to be unknown. This does not appear in Generation II, which uses a special status screen for Pokémon Eggs different from that of normal Pokémon, and was removed in Generation IV, when the section of a Pokémon's status screen that displays type was separated from where it was met. From Generation IV on, Eggs are considered as Normal-type Pokémon by the game.
Weather Ball's type depends on the weather. If Weather Ball is used when the field is under the effect of Shadow Sky, Weather Ball changes to a ???-type move. Despite this, if a Pokémon with Color Change is hit with this move under these conditions, it will be changed to a Normal-type Pokémon.
This situation is the only way to legitimately encounter the type effectiveness of a ???-type move.
Arceus has the Ability Multitype, which changes its type and appearance depending on the Plate it is holding. Likely as a precaution for Arceus hacked to be ???-type, a ???-type sprite of Arceus is present in Pokémon Diamond, Pearl, Platinum, HeartGold, and SoulSilver; however, it is never otherwise used without hacking.
On official material, the ??? type can be used to denote a type that has not yet been revealed. Leading up to the release of Pokémon X and Y, Sylveon's type was listed as ??? on official material until its actual type was revealed to be Fairy.
The ??? type is not present in the coding of the Generation V games, since Eggs had not displayed types from Generation IV onward and the type of Curse was newly changed to Ghost. This was possibly because it necessitated making many special cases that would otherwise be unnecessary. Since the only official use of the type at the time of its retirement was for a single non-damaging move, the type itself was essentially useless.