USB Keyboard with 18F2550
I finally did it. Let me share with you how i've managed. First of all i used "usb_puts" function not "usb_put_package". You need to make a single change in "usb_desc_keyboard.h". Rearrange "report count" according to your need. 

0x95, 0x0C, //report count (5) //47,48 

In default version this was "0x05". It can send 5 keys states with usb. In my prototype there are 12 buttons. A 3x4 matrix. With couple experiments i raised this number. 

static int8 tx_msg[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; tx_msg[0],tx_msg[1] is reserved, i actually don't know. 

So we start using from tx_msg[2] and send datas.

Here is some example code:

void usb_send()
{
   static int8 tx_msg[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};      

   static int8 leds;
   //receive NUM LOCK, CAPS LOCK, etc LED status from PC.
   //we won't do anything with it.
   if (usb_kbhit(2)) 
   {
      usb_get_packet(2, &amp;leds, 1);
   }     

   //make necessary changes in tx_msg here.

   if(!input(pin_B3))
      tx_msg[13]=0x0F;
   else
      tx_msg[13]=0;

   usb_puts(1,tx_msg,sizeof(tx_msg),timeout);     
}