Question: Is use of VO´s (POCO) a bad design pattern? Some people say that all domain logic of an object needs to be together in that object.

Ex.: ProductVO: Id, Name, Description

ProductBO: SearchById(int id), Insert(ProductVO newProduct), Update(ProductVO updatedProduct, SearchByKeyword(string word)......

Answer: 
Value objects are great!

Why in the world would you want to keep calling "IsValidName(myString)" all over the place when you could just encapsulate the rules of what makes a name into a Name class, and then have the compiler make sure that a non-validated name never gets passed around?
Not a bad design pattern if used properly.
For me POCOs should have only intra-object logic, all inter-object logic belongs in the business layer.