Setting custom permissions per-application I want more granular control over permissions. I’m fine with applications having some permissions, but I want to be in charge and have more granular control.

Can this be done on Android? I know iOS has this for some things like contacts and calendar data. The user is prompted before the application gets access to these sensitive datasets.

Technically, I can see this working by denying API access when the application tries to access it.
Adding to Chahk's answer: Yes, it's true that "natively" permissions are an "all-or-nothing". The "standard user" is expected to either accept all permissions an app requests -- or to refrain from its installation.

And yes, it's true: using an app like Permissions Denied, which simply "denies" an app certain permissions, apps might force-close as they don't expect this.

But there's a third way where apps are simply fed "fake data". This is done e.g. by LBE and PDroid (see Other apps to manage permissions? and how to fake my personal information for details). App wants the contacts? Ooops, address book is empty. IMEI? OK, how about "1234567890"? Internet? Sorry, but we're in a tunnel -- neither WiFi nor mobile data available. So all returned data make sense to the requesting app: It does not get a simple "exception", so it doesn't crash. And what it makes up from the fake data -- who cares? :)

Needless to say: root is required here as well...