How to generate special areas in world generator

Hello,

I would like to know how can i effectively generate special areas in generator like lakes.

I’m working on one-layer cubic world generator. You can view principle on this screenshot:

I have list of available cubes from that I’m selecting the one that will be generated

blocks.Add(new BlockInfo{id = 0, name = "Grass"});
blocks.Add(new BlockInfo{id = 1, name = "Water"});

I’m storing already generated cubes in array so for example I can get near cubes of specific cube.

Right now I’m generating only one specific cube, id: 0 => Grass.
I would like to know how can I effectively generate special areas from another blocks like Water(but not really often => so you will have more grass and only often some water lake), so result would be something like this:

I’ve already tried some things but maximum size of lake was 1 or 2 blocks and it was on every 3rd block so it didn’t look nice.

EDIT//
There is code where I’m generating cubes

I only need some idea how could I do it or some pseudo-code how to select between lot of objects, modify their frequency of generating and size of their area(Let’s say I would like to generate lakes but sea as well)[/code]

well you could try and generate based on how much of other areas exist? like lets say 30% of the total tiles are grass. but you only want 5% of it to be water? and then based on that you perhaps could get some intresting frequency?