For single-player, cheat as much as you like, of course. For multiplayer, anything that's not supported by the creator of the game, I consider ammoral cheating.
There's a difference between available functionality and intended functionality.
Take World of Warcraft for instance - from the second Beta revision onwards, Blizzard made the use of the built-in LUA script interpreter available for other people to use, spawning what has become a hugely successful modding community. Almost every aspect of the interface can be customised and additional functionality added within the framework - for instance (before the game incorporated it directly) mods to let you know how much threat you had on the target, relative to other players (most importantly, your tank). Or mods to guide you, GPS-style, to your next quest target.
Every now and then, however, someone came up with a mod which abused the available functionality in a way that Blizzard didn't intend them to. Sometimes they were able to disable that functionality (example: a mod which marked on the ground where any incoming boss damage effects would occur - Blizzard didn't intend the encounters to be this explicitly easy). Sometimes however, they couldn't disable the functionality and just had to tell people "Oi - stop doing that, stop making those mods, or we'll ban you.
" A prime example being cross-faction communication mods. It's still possible to write a mod which communicates, morse-code-style, with members of the opposite faction (where, any of those also running the mod could receive and decode the messages). However, it's not in the intended spirit of the game, fairly clearly, as Blizzard made a design decision to make the two factions not able to communicate natively.
So - how does this relate to Minecraft. Well, pretty simply - anything which is obviously a design decision in the game, shouldn't be countered (in multiplayer) by any modifications. It's *possible* to load up a wallhack in Counterstrike and view people through walls. Obviously it's not how the game was designed to be played, as the walls aren't all made of glass. Likewise, the main entire aim of Minecraft is to dig and explore and mine for resources. Anything which shows you how to get directly to them, is clearly against how the designers intend the functionality to be used. Otherwise diamond would be plentiful, and on the surface.
By making the game in Java, they really have opened themselves up to making it possible for anyone to hack anything into the game, client-side, that they want. Some things aren't possible (for instance, transparency mods - as the engine only renders the surfaces you can see - the blocks behind them aren't rendered until you dig down and can see them - and no, the 'zoning in' effect doesn't counter this - while chunks are loading, you can "see" them). This is as opposed to most 3D games, which render not only ever area you can see, but every area you'd be able to see into from standing in any of the points you can see - and there's good design reasons for that which I won't explain now cause this post is already too long, lol.
Flying is a possible client-side modification. Is it intended by Mojang? Probably not - until they add jetpacks to the game. Mineral radar is possible by client-side modification. Is it intended by Mojang? No - it goes against the whole idea of the game. Though if they do one day add metal detectors, you can be sure they'll work with a limited range (and won't pick up diamonds - not metal).
If you can tell a modification goes against the design decisions of the game, then it's cheating. Don't do it!
EDIT: Although I confess while I don't use a flying mod, I don't have a particular problem with those who do use it for creative purposes rather than avoiding combat. I wouldn't, but that's probably why all my structures are low down on the ground and boring.